/*
 * app_hub_api_usart_event.h
 *
 *  Created on: 2023年7月25日
 *      Author: Administrator
 */

#ifndef APP_HUB_API_USART_EVENT_H_
#define APP_HUB_API_USART_EVENT_H_

#include "stdbool.h"
#include "app_hub_api_event_link.h"
#include "app_hub_api_subsidiary.h"
#include "app_hub_api_def.h"


// ----------------usart rx---------------- //

/**
 * @brief rx_set_init 收到PANEL的配置初始化函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_set_init(const hub_api_usart_msg_t *ptr_pkt,
                hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_set_rfm_qrfh 收到PANEL的配置RFM QRFH函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_set_rfm_qrfh(const hub_api_usart_msg_t *ptr_pkt,
                    hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_set_rfm_qrfh_batch 收到PANEL的批量配置RFM QRFH函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_set_rfm_qrfh_batch(const hub_api_usart_msg_t *ptr_pkt,
                          hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_set_rfm_status_model 收到PANEL的配置RFM状态物模型函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_set_rfm_status_model(const hub_api_usart_msg_t *ptr_pkt,
                            hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_set_rfm_operate_model 收到PANEL的配置RFM操作物模型函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_set_rfm_operate_model(const hub_api_usart_msg_t *ptr_pkt,
                             hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_set_rfm_sync_option_batch 收到PANEL的批量设置option函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_set_rfm_sync_option_batch(const hub_api_usart_msg_t *ptr_pkt,
                            hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_set_rfm_sync_qrfh_batch 收到PANEL的批量设置qrfh函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_set_rfm_sync_qrfh_batch(const hub_api_usart_msg_t *ptr_pkt,
                            hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_set_hub_reset 收到PANEL的重启HUB函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_set_hub_reset(const hub_api_usart_msg_t *ptr_pkt,
                             hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_get_registered_rfm_info 收到PANEL的获取已注册RFM信息函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_get_registered_rfm_info(const hub_api_usart_msg_t *ptr_pkt,
                               hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_get_specific_rfm_info 收到PANEL的获取HUB内指定RFM相关信息函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_get_specific_rfm_info(const hub_api_usart_msg_t *ptr_pkt,
                             hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_get_hub_physical 收到PANEL的获取网关的电压温度
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_get_hub_physical(const hub_api_usart_msg_t *ptr_pkt,
                                  hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_get_hub_rssi 收到PANEL的获取网关的rssi
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_get_hub_rssi(const hub_api_usart_msg_t *ptr_pkt,
                                  hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_get_hub_ver 收到PANEL的获取网关的软件版本
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_get_hub_ver(const hub_api_usart_msg_t *ptr_pkt,
                                  hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_do_local_register 收到PANEL的本地注册函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_local_register(const hub_api_usart_msg_t *ptr_pkt,
                         hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_do_mac_register 收到PANEL的MAC注册函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_mac_register(const hub_api_usart_msg_t *ptr_pkt,
                      hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_do_qrcode_register 收到PANEL的二维码注册函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_qrcode_register(const hub_api_usart_msg_t *ptr_pkt,
                          hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_do_sync_broadcast 收到PANEL的同步广播函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_sync_broadcast(const hub_api_usart_msg_t *ptr_pkt,
                         hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_do_normal_broadcast 收到PANSEL的普通广播函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_normal_broadcast(const hub_api_usart_msg_t *ptr_pkt,
                           hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_do_point_to_point 收到PANEL的点对点下行函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_point_to_point(const hub_api_usart_msg_t *ptr_pkt,
                         hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_do_delete_rfm 收到PANEL删除节点函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_delete_rfm(const hub_api_usart_msg_t *ptr_pkt,
                         hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_do_start_ota 收到PANEL的开始OTA升级函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_start_ota(const hub_api_usart_msg_t *ptr_pkt,
                    hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_do_sn_register 收到PANEL的SN注册函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_sn_register(const hub_api_usart_msg_t *ptr_pkt,
                      hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_do_file_transport 收到PANEL的文件传输函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_file_transport(const hub_api_usart_msg_t *ptr_pkt,
                      hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_do_choose_ant 收到PANEL的切换天线函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_choose_ant(const hub_api_usart_msg_t *ptr_pkt,
                      hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_do_stop_sync_broadcast 收到PANEL的强制停止广播函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_stop_sync_broadcast(const hub_api_usart_msg_t *ptr_pkt,
                                           hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_do_test 收到PANEL的测试函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_do_test(const hub_api_usart_msg_t *ptr_pkt,
                      hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_event_hub_event 收到PANEL的HUB自身事件应答函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_event_hub_event(const hub_api_usart_msg_t *ptr_pkt,
                       hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_event_rfm_event 收到PANEL的外设事件应答函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_event_rfm_event(const hub_api_usart_msg_t *ptr_pkt,
                       hub_api_usart_msg_t *ptr_ack_pkt);
/**
 * @brief rx_event_file_transfer 收到PANEL的文件传输事件应答函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_event_file_transfer(const hub_api_usart_msg_t *ptr_pkt,
                           hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief rx_event_rfm_debug_event 收到PANEL的外设调试事件应答函数
 * @param ptr_pkt, 收到的报文；
 *        ptr_ack_pkt，被动应答的报文
 * @return 0：正常；其他：异常
 */
int rx_event_rfm_debug_event(const hub_api_usart_msg_t *ptr_pkt,
                             hub_api_usart_msg_t *ptr_ack_pkt);

/**
 * @brief DS_hub_api_usart_listen 主循环里调用，从串口队列里获取数据，组成报文
 * @param none
 * @return none
 */
void DS_hub_api_usart_listen(void);

/**
 * @brief DS_hub_api_usart_msg_parse 串口队列里收到的字节，按照报文格式解析，打包成hub_api_usart_msg_t
 * 格式结构体
 * @param data 串口队列里收到的字节
 *        ptr_pkt 解析成功之后，打包的hub_api_usart_msg_t格式报文
 * @return 0 解析成功； 1 正在解析；2 LEN的内容错误； 3 CRC错误； 4 帧尾错误；
 */
int DS_hub_api_usart_msg_parse(unsigned char data, hub_api_usart_msg_t *ptr_pkt);

/**
 * @brief DS_hub_api_creat_usart_rx_event 打包usart rx event事件，推到队列
 * @param ptr_pkt, hub_api_usart_msg_t类型结构体
 * @return 0：正常；其他：异常
 * @note 不能在中断里调用
 */
int DS_hub_api_creat_usart_rx_event(const hub_api_usart_msg_t *ptr_pkt);

/**
 * @brief DS_hub_api_get_usart_rx_event 从队列里获取usart rx event事件
 * @param ptr_pkt, hub_api_rx_evt_t类型结构体
 * @return 0：正常；其他：异常
 * @note 不能在中断里调用
 */
int DS_hub_api_get_usart_rx_event(hub_api_rx_evt_t *ptr_pkt);

/**
 * @brief DS_hub_api_usart_rx_event_mediator  usart rx event事件分发器
 * @param ptr_pkt，收到的报文
 *        ptr_ack_pkt，应答报文
 * @return 0：正常；其他：异常
 */
int DS_hub_api_usart_rx_event_mediator(const hub_api_usart_msg_t *ptr_pkt,
                                       hub_api_usart_msg_t *ptr_ack_pkt);


// ----------------usart tx---------------- //

typedef int (*hub_api_usart_tx_fun)(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);

typedef struct{
  HUB_API_USART_MSG_FCODE_E fcode;
  hub_api_usart_tx_fun fun;
}hub_api_usart_tx_entry_t;

/**
 * @brief tx_set_init 应答PANEL的配置初始化函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_set_init(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_set_rfm_qrfh 应答PANEL的配置RFM QRFH函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_set_rfm_qrfh(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_set_rfm_qrfh_batch 应答PANEL的批量配置RFM QRFH函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_set_rfm_qrfh_batch(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_set_rfm_status_model 应答PANEL的配置RFM状态物模型函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_set_rfm_status_model(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_set_rfm_operate_model 应答PANEL的配置RFM操作物模型函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_set_rfm_operate_model(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_set_rfm_sync_option_batch 应答PANEL的批量配置RFM option函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_set_rfm_sync_option_batch(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_set_rfm_sync_qrfh_batch 应答PANEL的批量配置RFM qrfh函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_set_rfm_sync_qrfh_batch(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_set_hub_reset 应答PANEL设置 HUB reset函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_set_hub_reset(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_get_registered_rfm_info 应答PANEL的获取已注册RFM信息函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_get_registered_rfm_info(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_get_specific_rfm_info 应答PANEL的获取HUB内指定RFM相关信息函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_get_specific_rfm_info(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_get_hub_physical 应答PANEL的获取网关的电压温度
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_get_hub_physical(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_get_hub_rssi 应答PANEL的获取网关的rssi
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_get_hub_rssi(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);

/**
 * @brief tx_get_hub_ver 应答PANEL的获取网关的版本
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_get_hub_ver(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_local_register 应答PANEL的本地注册操作的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_local_register(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_mac_register 应答PANEL的MAC注册操作的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_mac_register(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_qrcode_register 应答PANEL的扫码注册操作的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_qrcode_register(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_sync_broadcast 应答PANEL的同步广播操作的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_sync_broadcast(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_normal_broadcast 应答PANEL的普通广播操作的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_normal_broadcast(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_point_to_point 应答PANEL的点对点操作的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_point_to_point(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_delete_rfm 应答PANEL的删除节点函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_delete_rfm(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_start_ota 应答PANEL的开始OTA的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_start_ota(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_sn_register 应答PANEL的SN注册操作的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_sn_register(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_file_transport 应答PANEL的文件传输的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_file_transport(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_choose_ant 应答PANEL的切换天线的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_choose_ant(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_stop_sync_broadcast 应答PANEL的停止广播的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_stop_sync_broadcast(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_do_test 应答PANEL的测试的函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_do_test(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_event_hub_event 发送HUB自身事件函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_event_hub_event(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_event_rfm_event 发送外设事件函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_event_rfm_event(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);
/**
 * @brief tx_event_rfm_debug_event 发送外设调试事件函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_event_rfm_debug_event(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);

/**
 * @brief tx_event_file_event 发送文件传输事件函数
 * @param ptr_pkt, 应答报文
 *        waitack 发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int tx_event_file_event(const hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);

/**
 * @brief DS_hub_api_creat_usart_retransmission 打包usart tx event重发事件，推送给HUB_API处理
 * @param ptr_pkt, hub_api_usart_msg_t类型结构体
 * @return 无
 * @note 不能在中断里调用
 */
int DS_hub_api_creat_usart_retransmission(const hub_api_usart_msg_t *ptr_pkt);
/**
 * @brief DS_hub_api_creat_passive_usart_ack 打包usart tx event被动应答事件，推送给HUB_API处理
 * @param ptr_pkt, hub_api_usart_msg_t类型结构体
 * @return  无
 * @note 不能在中断里调用
 */
void DS_hub_api_creat_passive_usart_ack(const hub_api_usart_msg_t *ptr_pkt);
/**
 * @brief DS_hub_api_creat_hub_event 打包usart tx event HUB自身事件，推送给HUB_API处理
 * @param evt_type 事件类型
 *        data 事件内容
 *        len data长度
 * @return  无
 * @note 不能在中断里调用
 */
void DS_hub_api_creat_hub_event(HUB_API_HUB_EVT_TYPE_E evt_type,
                                unsigned char *data, int len);
/**
 * @brief DS_hub_api_creat_rfm_event 打包usart tx event RFM外设事件，推送给HUB_API处理
 * @param rfmid： RFM ID
 *        rollingcode
 *        rssi：
 *        dbginfo：debug信息
 *        cmd：
 *        payload：
 *        payload_len payload的字节数
 * @return  无
 * @note 不能在中断里调用
 */
void DS_hub_api_creat_rfm_event(unsigned char rfmid,
                                unsigned char rollingcode[4],
                                unsigned char rssi,
                                unsigned char dbginfo[2],
                                unsigned char cmd,
                                unsigned char *payload,
                                unsigned char payload_len);

/**
 * @brief DS_hub_api_creat_file_event 打包usart tx event 文件传输事件，推送给HUB_API处理
 * @param evt_type 事件类型
 *        data 事件内容
 *        len data长度
 * @return 无
 * @note 不能在中断里调用
 */
void DS_hub_api_creat_file_event(HUB_API_FILE_EVT_TYPE_E evt_type,
                                unsigned char *data, int len);


/**
 * @brief DS_hub_api_P2P_do_finish 点对点操作之后，成功/失败结果
 * @param rfmid
 *        result， 0，成功，1失败
 *        keyvalue， 点对点操作的物模型数组，含key值，
 *        keyvalue_len 物模型数组buf
 * @return 无
 */
void DS_hub_api_P2P_do_finish(unsigned char rfmid,
                           unsigned char result,
                           unsigned char *keyvalue, int keyvalue_len);

int DS_hub_api_get_usart_tx_event(hub_api_tx_evt_t *ptr_pkt);

/**
 * @brief DS_hub_api_usart_tx_event_mediator  usart tx event事件分发器
 * @param ptr_pkt，收到的报文
 *        waitack，发送的报文是否需要对方应答
 * @return 0：正常；其他：异常
 */
int DS_hub_api_usart_tx_event_mediator(hub_api_usart_msg_t *ptr_pkt, unsigned char *waitack);

/**
 * @brief check_usart_active_evt_is_finish  判断当前报文有没有收到应答
 * @param fcode 报文fcode
 * @return true，收到了；false 没有收到
 */
bool check_usart_active_evt_is_finish(HUB_API_USART_MSG_FCODE_E fcode);
/**
 * @brief clean_usart_active_evt_tns_flag  清除报文发送次数，和被接收的判断标志
 * @param fcode 报文fcode
 * @return none
 */
void clean_usart_active_evt_tns_flag(HUB_API_USART_MSG_FCODE_E fcode);

#endif /* APP_HUB_API_USART_EVENT_H_ */
